package com.style.study.juc.c_xxx_hashMap;

import java.util.HashMap;

/**
 * @author zhangsan
 * @date 2021/4/12 10:55
 */
public class T_HashMap {

    /** 最大容量2^30. 容量要设为2^N. */
    static final int MAXIMUM_CAPACITY = 1 << 30;
    /** 返回比他大的2的幂次方 */
    static int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }


    public static void main(String[] args) {
        // >>> 拿0补
        // >>  拿第1位补
        // 正数两个没区别, 负数区别就大了
//        System.out.println( Integer.toBinaryString((int)(-Math.pow(2, 17) )>>>16) );

        int cap = 1000;
        System.out.println(tableSizeFor(cap));

        HashMap<String, Integer> map = new HashMap<>();
        map.put("aaa", 1);
        map.put("aaa", 1);
        map.put("aaa", 1);
        map.put("aaa", 1);
        map.put("aaa", 1);

        System.out.println(map.get("aaa"));
    }

}
